home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / fb386 / superedt / s_map.bas < prev    next >
BASIC Source File  |  1991-10-18  |  29KB  |  624 lines

  1. 10000 '
  2. 10010 '  SUPER大戦略MAP-EDITOR
  3. 10020 '               BY MEET MHG02535
  4. 10030 '
  5. 10040 SCREEN@ 0:WIDTH 80,25:CONSOLE 0,24,2:COLOR 7,0,%10,0
  6. 10050 CLEAR ,,,400000:DEFINT A-Z:ON ERROR GOTO *ERR
  7. 10060 DIM LAND&(3967),HQ&(185),MAPCHECK(13),C$(3)
  8. 10070 DIM UNITNAME$(125),MASK(31,31),MAP_COLOR(25),MASK&(127)
  9. 10080 DIM MAP_DATA$(63),CAMP$(3),CAMP_UNIT$(4*48),PRODUCTION$(3)
  10. 10090 DIM MAP1&(29567),ARM_NAME$(15),UNITDATA(125,13)
  11. 10100 DEF FNMAP(X,Y)=ASC(MID$(MAP_DATA$(Y),X*2+1,1))
  12. 10110 DEF FNUNIT_TMP(X,Y)=ASC(MID$(MAP_DATA$(Y),X*2+2,1))
  13. 10120 DEF FNUNIT(X,Y)=FNUNIT_TMP(X,Y) MOD 64+(FNUNIT_TMP(X,Y)\64)*48
  14. 10130 DEF FNUNIT_NO(X,Y)=ASC(MID$(CAMP_UNIT$(FNUNIT(X,Y)),3,1))-1
  15. 10140 DEF FNUNIT_NO1(NO)=ASC(MID$(CAMP_UNIT$(NO),3,1))-1
  16. 10150 DEF FNUNIT_LEFT(X,Y)=ASC(MID$(CAMP_UNIT$(FNUNIT(X,Y)),4,1))
  17. 10160 DEF FNUNIT_DATA$(I,J,K)=MID$(CAMP_UNIT$(I),J,K)
  18. 10180 GOSUB *LOAD
  19. 10185 GOSUB *PALETTE
  20. 10190 GOSUB *LOAD_DATA
  21. 10200 GOSUB *MASK
  22. 10210 GOSUB *SET_HEX_DATA
  23. 10220 *INITIALIZE '--------------------------------------------- INITIALIZE
  24. 10230 CLS
  25. 10240 C$(0)="青":C$(1)="赤":C$(2)="緑":C$(3)="黄"
  26. 10250 UNIT_NO=0:HEX_NO=0:UNIT_S=0:CAMP=1
  27. 10260 HEX_X=0:HEX_Y=0:HEX_MODE=0 'HEX_MODE = 0&1 .. VIEW MODE 2.. HQ MODE
  28. 10270 GOSUB *PRINT_HEX_ALL:GOSUB *PRINT_HEX
  29. 10280 EDIT_MODE=0 ' 0..HEX 1..UNIT
  30. 10290 SYMBOL(0,464),"MODE HEXSIZE SAVE LOAD SITUATION MAPCHECK CLEAR BOX",1,1,%10
  31. 10300 GOSUB *PRINT_SELECTION
  32. 10310 MOUSE 0:MOUSE 1,320,240,1
  33. 10320 *MAIN '--------------------------------------------------------- MAIN
  34. 10330 ON EDIT_MODE+1 GOTO *HEX_MODE,*UNIT_MODE
  35. 10340 *HEX_MODE '------------------------------------------------- HEX_MODE
  36. 10350  WHILE MOUSE(2,0)=0:WEND
  37. 10360  MX=MOUSE(0):MY=MOUSE(1)
  38. 10370  NX=HEX_X+X:NY=HEX_Y+Y
  39. 10380  Y=(MY-HEX_SY/2-HEX_SY/8)/HEX_SY:X=(MX-HEX_SX/2+HEX_SX*(Y MOD 2=1)/2)/HEX_SX
  40. 10390  IF X<0 THEN X=0 ELSE IF X>HEX_MX LINE(543,422)-(630,438),PSET,%0,BF:GOTO 10430
  41. 10400  IF Y<0 THEN Y=0 ELSE IF Y>HEX_MY LINE(543,422)-(630,438),PSET,%0,BF:GOTO 10430
  42. 10410  IF NX<>HEX_X+X OR NY<>HEX_Y+Y LINE(543,422)-(630,438),PSET,%0,BF:SYMBOL(543,422),"X="+STR$(HEX_X+X)+" Y="+STR$(HEX_Y+Y),1,1,%10
  43. 10420  IF X<=HEX_MX AND Y<=HEX_MY                GOTO *SELECT_HEX
  44. 10430  IF MY>462                                 GOTO *SELECT_COMMAND
  45. 10440  IF MX>574 AND MX<639 AND MY<65  AND MY>0  GOSUB *SELECT_HEX_ALL:GOTO 10350
  46. 10450  IF MX>542 AND MX<639 AND MY<358 AND MY>69 GOTO *SELECT_SELECTION
  47. 10460  GOTO 10350
  48. 10470  *SELECT_HEX '-------------------------------------------- SELECT_HEX
  49. 10480   IF X=0 AND HEX_MODE<2 IF HEX_X>0 GOTO *MOVE_HEX
  50. 10490   IF Y=0 AND HEX_MODE<2 IF HEX_Y>0 GOTO *MOVE_HEX
  51. 10500   IF X=HEX_MX AND HEX_MODE<2 IF X+HEX_X<63 GOTO *MOVE_HEX
  52. 10510   IF Y=HEX_MY AND HEX_MODE<2 IF Y+HEX_Y<63 GOTO *MOVE_HEX
  53. 10520   MID$(MAP_DATA$(Y+HEX_Y),(X+HEX_X)*2+1,1)=CHR$(HEX_NO)
  54. 10530   PSET(575+X+HEX_X,1+Y+HEX_Y),%MAP_COLOR(FNMAP(X+HEX_X,Y+HEX_Y))
  55. 10540   ON HEX_MODE+1 GOTO *HEX_MODE0,*HEX_MODE1,*HEX_MODE2
  56. 10550   *HEX_MODE0
  57. 10560    SX=X*32+(Y MOD 2)*16:SY=Y*24:X1=HEX_X+X:Y1=HEX_Y+Y
  58. 10570    PUT@A(SX,SY)-(SX+31,SY+31),LAND&,MATTE,,,0,128*FNMAP(X1,Y1)
  59. 10580    IF FNUNIT_TMP(X1,Y1)<>255 A$=UNITNAME$(FNUNIT_NO(X1,Y1)):I=INSTR(A$," "):COLOR ,%10:SYMBOL(SX,SY+16),A$,1/(-3*(I=0)-2*(I>9)-(I>5)+1),.5!,%(FNUNIT_TMP(X1,Y1)\64)+1,,,8:COLOR ,%0:SYMBOL(SX+8,SY+8),STR$(FNUNIT_LEFT(X1,Y1)),1,.5!,%10,,,8
  60. 10590    GOTO 10350
  61. 10600   *HEX_MODE1
  62. 10610    SX=X*16+(Y MOD 2)*8:SY=Y*12:X1=HEX_X+X:Y1=HEX_Y+Y
  63. 10620    PUT@A(SX,SY)-(SX+31,SY+31),LAND&,MATTE,.5!,.5!,0,128*FNMAP(X1,Y1)
  64. 10630    IF FNUNIT_TMP(X1,Y1)<>255 SYMBOL(SX,SY+8),STR$(FNUNIT_LEFT(X1,Y1)),.5!,.5!,%(FNUNIT_TMP(X1,Y1)\64)+1,,,8
  65. 10640    GOTO 10350
  66. 10650   *HEX_MODE2
  67. 10660    SX=X*8+(Y MOD 2)*4:SY=Y*6
  68. 10670    IF FNUNIT_TMP(X,Y)=255 I=FNMAP(X,Y) ELSE I=25+(FNUNIT_TMP(X,Y)\64)
  69. 10680    PUT@A(SX,SY)-(SX+7,SY+5),HQ&,MATTE,,,0,6*I
  70. 10690    GOTO 10350
  71. 10700  *MOVE_HEX '------------------------------------------------ MOVE_HEX
  72. 10710   LINE(574+HEX_X,HEX_Y)-STEP(HEX_MX+3,HEX_MY+3),XOR,%10,B
  73. 10720   HEX_X=HEX_X+X-(HEX_MX+1)/2:HEX_Y=HEX_Y+Y-(HEX_MY+1)/2
  74. 10730   HEX_X=INT(HEX_X/2)*2      :HEX_Y=INT(HEX_Y/2)*2
  75. 10740   IF HEX_X<0 HEX_X=0 ELSE IF HEX_X>63-HEX_MX HEX_X=63-HEX_MX
  76. 10750   IF HEX_Y<0 HEX_Y=0 ELSE IF HEX_Y>63-HEX_MY HEX_Y=63-HEX_MY
  77. 10760   GOSUB *PRINT_HEX
  78. 10770   GOTO 10350
  79. 10780 *SELECT_HEX_ALL '------------------------------------- SELECT_HEX_ALL
  80. 10790  IF HEX_MODE=2 RETURN
  81. 10800  X1=HEX_X:Y1=HEX_Y
  82. 10810  WHILE MOUSE(2,0)
  83. 10820   MX=MOUSE(0):MY=MOUSE(1)
  84. 10830   LINE(574+HEX_X,HEX_Y)-STEP(HEX_MX+3,HEX_MY+3),XOR,%10,B
  85. 10840   HEX_X=MX-575:HEX_Y=((MY-1)\2)*2
  86. 10850   IF HEX_X<0 HEX_X=0 ELSE IF HEX_X>63-HEX_MX HEX_X=63-HEX_MX
  87. 10860   IF HEX_Y<0 HEX_Y=0 ELSE IF HEX_Y>63-HEX_MY HEX_Y=63-HEX_MY
  88. 10870   LINE(574+HEX_X,HEX_Y)-STEP(HEX_MX+3,HEX_MY+3),XOR,%10,B
  89. 10880  WEND
  90. 10890  IF X1<>HEX_X OR Y1<>HEX_Y LINE(574+HEX_X,HEX_Y)-STEP(HEX_MX+3,HEX_MY+3),XOR,%10,B:GOSUB *PRINT_HEX
  91. 10900  RETURN
  92. 10910 *SELECT_SELECTION '--------------------------------- SELECT_SELECTION
  93. 10920  X=(MX-559)/32:Y=(MY-86)/32
  94. 10930  HEX_NO=X+Y*3
  95. 10940  IF HEX_NO>24 HEX_NO=24
  96. 10950  PUT@A(543,374)-(574,405),LAND&,,,,,128*HEX_NO
  97. 10960  GOTO 10350
  98. 10970 *SELECT_COMMAND '------------------------------------- SELECT_COMMAND
  99. 10980  X=MX/8
  100. 10990  IF X<5 GOSUB *CHANGE_MODE:GOTO 10350
  101. 11000  IF X>5 AND X<13 GOSUB *CHANGE_HEX_SIZE:GOTO 10350 '
  102. 11010  IF X>13 AND X<18 GOSUB *SAVE:GOTO 10350
  103. 11020  IF X>18 AND X<23 GOSUB *LOAD:GOTO 10350
  104. 11030  IF X>23 AND X<33 GOSUB *SITUATION:GOTO 10350 '
  105. 11040  IF X>33 AND X<42 GOSUB *MAPCHECK:GOTO 10350 '
  106. 11050  IF X>42 AND X<48 GOSUB *CLEAR:GOTO 10350 '
  107. 11060  IF X>48 AND X<52 GOSUB *BOX:GOTO 10350 '
  108. 11070  GOTO 10350
  109. 11080 *CHANGE_HEX_SIZE '----------------------------------- CHANGE_HEX_SIZE
  110. 11090  SYMBOL(5*8,464),"HEXSIZE",1,1,%1
  111. 11100  WHILE MOUSE(2,0):WEND
  112. 11110  SYMBOL(16,448),"HEX SIZE: 16*18 32*36 64*64",1,1,%10
  113. 11120  X1=HEX_MODE
  114. 11130  WHILE MOUSE(2,0)=0:WEND
  115. 11140  MX=MOUSE(0):MY=MOUSE(1)
  116. 11150  IF MX>96  AND MX<136 AND MY>447 AND MY<465 HEX_MODE=0:GOTO 11190
  117. 11160  IF MX>144 AND MX<184 AND MY>447 AND MY<465 HEX_MODE=1:GOTO 11190
  118. 11170  IF MX>192 AND MX<232 AND MY>447 AND MY<465 HEX_MODE=2:GOTO 11190
  119. 11180  GOTO 11130
  120. 11190  IF HEX_X>63-HEX_MX HEX_X=63-HEX_MX
  121. 11200  IF HEX_Y>63-HEX_MY HEX_Y=63-HEX_MY
  122. 11210  IF HEX_MODE<>X1 AND X1<2 LINE(0,0)-(527,447),PSET,%0,BF:LINE(574+HEX_X,HEX_Y)-STEP(HEX_MX+3,HEX_MY+3),XOR,%10,B:GOSUB *PRINT_HEX
  123. 11220  IF HEX_MODE<>X1 AND X1=2 LINE(0,0)-(527,447),PSET,%0,BF:GOSUB *PRINT_HEX
  124. 11230  SYMBOL(40,464),"HEXSIZE",1,1,%10
  125. 11240  LINE(16,448)-(300,463),PSET,%0,BF
  126. 11250  RETURN
  127. 11260 *CLEAR '------------------------------------------------------- CLEAR
  128. 11270  SYMBOL(42*8,464),"CLEAR",1,1,%1
  129. 11280  WHILE MOUSE(2,0):WEND
  130. 11290  SYMBOL(16,448),"MAP CLEAR: OK   CANCEL",1,1,%10
  131. 11300  WHILE MOUSE(2,0)=0:WEND
  132. 11310  MX=MOUSE(0):MY=MOUSE(1)
  133. 11320  IF MX>104 AND MX<120 AND MY>447 AND MY<465 GOTO *CLEAR_OK
  134. 11330  IF MX>144 AND MX<168 AND MY>447 AND MY<465 GOTO *CLEAR_CANCEL
  135. 11340  GOTO 11300
  136. 11350  *CLEAR_OK
  137. 11360  SYMBOL(104,448),"OK",1,1,%1
  138. 11370   FOR Y=0 TO 63
  139. 11380    FOR X=0 TO 63
  140. 11390     MID$(MAP_DATA$(Y),X*2+1,1)=CHR$(HEX_NO)
  141. 11400    NEXT
  142. 11410   NEXT
  143. 11420   GOSUB *PRINT_HEX_ALL:GOSUB *PRINT_HEX
  144. 11430  *CLEAR_CANCEL
  145. 11440  SYMBOL(42*8,464),"CLEAR",1,1,%10
  146. 11450  LINE(16,448)-(200,463),PSET,%0,BF
  147. 11460  RETURN
  148. 11470 *BOX '----------------------------------------------------------- BOX
  149. 11480  SYMBOL(48*8,464),"BOX",1,1,%1
  150. 11490  WHILE MOUSE(2,0):WEND
  151. 11500  SYMBOL(16,448),"START POINT",1,1,%10
  152. 11510  WHILE MOUSE(2,0)=0 AND MOUSE(2,1)=0:WEND
  153. 11520  MX=MOUSE(0):MY=MOUSE(1):IF MOUSE(2,1) THEN *BOX_CANCEL
  154. 11530  Y=(MY-HEX_SY/2-HEX_SY/8)/HEX_SY:X=(MX-HEX_SX/2+HEX_SX*(Y MOD 2=1)/2)/HEX_SX
  155. 11540  IF Y<0 THEN Y=0
  156. 11550  IF X<0 THEN X=0
  157. 11560  IF X>HEX_MX OR Y>HEX_MY THEN 11510
  158. 11570  SX1=X:SY1=Y
  159. 11580  WHILE MOUSE(2,0):WEND
  160. 11590  SYMBOL(112,448),"X="+STR$(SX1+HEX_X)+" Y="+STR$(SY1+HEX_Y),1,1,%10
  161. 11600  SYMBOL(208,448),"END POINT",1,1,%10
  162. 11610  WHILE MOUSE(2,0)=0 AND MOUSE(2,1)=0:WEND
  163. 11620  MX=MOUSE(0):MY=MOUSE(1):IF MOUSE(2,1) THEN *BOX_CANCEL
  164. 11630  Y=(MY-HEX_SY/2-HEX_SY/8)/HEX_SY:X=(MX-HEX_SX/2+HEX_SX*(Y MOD 2=1)/2)/HEX_SX
  165. 11640  IF Y<0 THEN Y=0
  166. 11650  IF X<0 THEN X=0
  167. 11660  IF X>HEX_MX OR Y>HEX_MY THEN 11610
  168. 11670  EX1=X:EY1=Y
  169. 11680  WHILE MOUSE(2,0):WEND
  170. 11690  SYMBOL(280,448),"X="+STR$(EX1+HEX_X)+" Y="+STR$(EY1+HEX_Y),1,1,%10
  171. 11700  IF SX1>EX1 SWAP SX1,EX1
  172. 11710  IF SY1>EY1 SWAP SY1,EY1
  173. 11720  FOR Y=SY1 TO EY1
  174. 11730   FOR X=SX1 TO EX1
  175. 11740    MID$(MAP_DATA$(Y+HEX_Y),(X+HEX_X)*2+1,1)=CHR$(HEX_NO)
  176. 11750    ON HEX_MODE+1 GOTO 11760,11800,11840
  177. 11760     SX=X*32+(Y MOD 2)*16:SY=Y*24:X1=HEX_X+X:Y1=HEX_Y+Y
  178. 11770     PUT@A(SX,SY)-(SX+31,SY+31),LAND&,MATTE,,,0,128*FNMAP(X1,Y1)
  179. 11780     IF FNUNIT_TMP(X1,Y1)<>255 A$=UNITNAME$(FNUNIT_NO(X1,Y1)):I=INSTR(A$," "):COLOR ,%10:SYMBOL(SX,SY+16),A$,1/(-3*(I=0)-2*(I>9)-(I>5)+1),.5!,%(FNUNIT_TMP(X1,Y1)\64)+1,,,8:COLOR ,%0:SYMBOL(SX+8,SY+8),STR$(FNUNIT_LEFT(X1,Y1)),1,.5!,%10,,,8
  180. 11790    GOTO 11870
  181. 11800     SX=X*16+(Y MOD 2)*8:SY=Y*12:X1=HEX_X+X:Y1=HEX_Y+Y
  182. 11810     PUT@A(SX,SY)-(SX+31,SY+31),LAND&,MATTE,.5!,.5!,0,128*FNMAP(X1,Y1)
  183. 11820     IF FNUNIT_TMP(X1,Y1)<>255 SYMBOL(SX,SY+8),STR$(FNUNIT_LEFT(X1,Y1)),.5!,.5!,%(FNUNIT_TMP(X1,Y1)\64)+1,,,8
  184. 11830    GOTO 11870
  185. 11840    SX=X*8+(Y MOD 2)*4:SY=Y*6
  186. 11850    IF FNUNIT_TMP(X,Y)=255 I=FNMAP(X,Y) ELSE I=25+(FNUNIT_TMP(X,Y)\64)
  187. 11860    PUT@A(SX,SY)-(SX+7,SY+5),HQ&,MATTE,,,0,6*I
  188. 11870   NEXT
  189. 11880  NEXT
  190. 11890  LINE(16,448)-(400,463),PSET,%0,BF
  191. 11900  SYMBOL(48*8,464),"BOX",1,1,%10
  192. 11910  LINE(575+SX1+HEX_X,1+SY1+HEX_Y)-(575+EX1+HEX_X,1+EY1+HEX_Y),PSET,%MAP_COLOR(FNMAP(SX1+HEX_X,SY1+HEX_Y)),BF
  193. 11920  RETURN
  194. 11930 *MAPCHECK '------------------------------------------------- MAPCHECK
  195. 11940  SYMBOL(33*8,464),"MAPCHECK",1,1,%1
  196. 11950  WHILE MOUSE(2,0):WEND
  197. 11960  FOR I=0 TO 13:MAPCHECK(I)=0:NEXT
  198. 11970  FOR Y=0 TO 63
  199. 11980   FOR X=0 TO 63
  200. 11990    I=FNMAP(X,Y)
  201. 12000    IF I>10 MAPCHECK(I-11)=MAPCHECK(I-11)+1
  202. 12010   NEXT
  203. 12020  NEXT
  204. 12030  SYMBOL( 16,448),"青 首都:"+STR$(MAPCHECK(10))+" 都市:"+STR$(MAPCHECK(0))+" 空港:"+STR$(MAPCHECK(5)),.5!,1,%10
  205. 12040  SYMBOL(140,448),"赤 首都:"+STR$(MAPCHECK(11))+" 都市:"+STR$(MAPCHECK(1))+" 空港:"+STR$(MAPCHECK(6)),.5!,1,%10
  206. 12050  SYMBOL(264,448),"緑 首都:"+STR$(MAPCHECK(12))+" 都市:"+STR$(MAPCHECK(2))+" 空港:"+STR$(MAPCHECK(7)),.5!,1,%10
  207. 12060  SYMBOL(388,448),"黄 首都:"+STR$(MAPCHECK(13))+" 都市:"+STR$(MAPCHECK(3))+" 空港:"+STR$(MAPCHECK(8)),.5!,1,%10
  208. 12070  SYMBOL(512,448),"中立 都市:"+STR$(MAPCHECK(4))+" 空港:"+STR$(MAPCHECK(9)),.5!,1,%10
  209. 12080  WHILE MOUSE(2,0)=0:WEND
  210. 12090  SYMBOL(33*8,464),"MAPCHECK",1,1,%10
  211. 12100  WHILE MOUSE(2,0):WEND
  212. 12110  LINE(16,448)-(600,463),PSET,%0,BF
  213. 12120  RETURN
  214. 12130 *SITUATION '----------------------------------------------- SITUATION
  215. 12140  GET@A(0,0)-(527,447),MAP1&:LINE(0,0)-(527,447),PSET,%0,BF
  216. 12150  SYMBOL(0,  0),"タイトル:"+MID$(MAP_SITUATION$,11,18),1,1
  217. 12160  SYMBOL(0, 16),"コメント:"+MID$(MAP_SITUATION$,77,42),1,1
  218. 12170  SYMBOL(0, 32),"    TURN:"+STR$(ASC(MID$(MAP_SITUATION$,1,1))),1,1
  219. 12180  SYMBOL(0, 48),"   START:"+STR$(ASC(MID$(MAP_SITUATION$,3,1))),1,1
  220. 12190  SYMBOL(0, 64),"    相場:"+STR$(ASC(MID$(MAP_SITUATION$,8,1))),1,1
  221. 12200  FOR I=0 TO 3
  222. 12210   SYMBOL(0, 96+I*48),C$(I)+"  NAME:"+MID$(CAMP$(I),1,16),1,1
  223. 12220   SYMBOL(0,112+I*48),"    収入:"+STR$(ASC(MID$(CAMP$(I),20,1))),1,1
  224. 12230   SYMBOL(0,128+I*48),"  軍資金:"+STR$( ASC(MID$(CAMP$(I),28,1))*&H1000000+ASC(MID$(CAMP$(I),27,1))*&H10000+ASC(MID$(CAMP$(I),26,1))*&H100+ASC(MID$(CAMP$(I),25,1)) ),1,1
  225. 12240  NEXT
  226. 12250  WHILE MOUSE(2,0):WEND
  227. 12260  WHILE MOUSE(2,0)=0 AND MOUSE(2,1)=0:WEND
  228. 12270  MX=MOUSE(0):MY=MOUSE(1)
  229. 12280  IF MOUSE(2,1) AND HEX_MODE<2 LINE(574+HEX_X,HEX_Y)-STEP(HEX_MX+3,HEX_MY+3),XOR,%10,B:PUT@A(0,0)-(527,447),MAP1&:RETURN
  230. 12290  IF MOUSE(2,1) AND HEX_MODE=2 PUT@A(0,0)-(527,447),MAP1&:RETURN
  231. 12300  Y=MY/16:F=0
  232. 12310  ON Y+1 GOSUB *S_TITLE,*S_COMMENT,*S_TURN,*S_START,*S_相場
  233. 12320  IF Y>5 AND Y<18 GOSUB *S_CAMP
  234. 12330  IF F=1 CLS 4:GOTO 12140
  235. 12340  GOTO 12260
  236. 12350  *S_TITLE
  237. 12360   LOCATE 0,20:LINE INPUT "タイトル:",A$:IF A$="" RETURN
  238. 12370   MID$(MAP_SITUATION$,11,18)=A$+STRING$(18," "):F=1:RETURN
  239. 12380  *S_COMMENT
  240. 12390   LOCATE 0,20:LINE INPUT "コメント:",A$:IF A$="" RETURN
  241. 12400   MID$(MAP_SITUATION$,77,42)=A$+STRING$(42," "):F=1:RETURN
  242. 12410  *S_TURN
  243. 12420   LOCATE 0,20:LINE INPUT "    TURN:",A$:IF A$="" RETURN
  244. 12430    IF VAL(A$)>255 OR VAL(A$)<0 RETURN
  245. 12440   MID$(MAP_SITUATION$,1,1)=CHR$(VAL(A$)):F=1:RETURN
  246. 12450  *S_START
  247. 12460   LOCATE 0,20:LINE INPUT "   START:",A$:IF A$="" RETURN
  248. 12470    IF VAL(A$)>255 OR VAL(A$)<0 RETURN
  249. 12480   MID$(MAP_SITUATION$,3,1)=CHR$(VAL(A$)):F=1:RETURN
  250. 12490  *S_相場
  251. 12500   LOCATE 0,20:LINE INPUT "    相場:",A$:IF A$="" RETURN
  252. 12510    IF VAL(A$)>255 OR VAL(A$)<0 RETURN
  253. 12520   MID$(MAP_SITUATION$,8,1)=CHR$(VAL(A$)):F=1:RETURN
  254. 12530  *S_CAMP
  255. 12540   Y=Y-6:Y1=Y\3:Y=Y-Y1*3
  256. 12550   ON Y+1 GOSUB *S_C_NAME,*S_C_収入,*S_C_MONEY
  257. 12560   IF F=1 CLS 4:GOTO 12140
  258. 12570   GOTO 12260
  259. 12580   *S_C_NAME
  260. 12590    LOCATE 0,20:PRINT C$(Y1)+"  NAME:";:LINE INPUT A$:IF A$="" RETURN
  261. 12600    MID$(CAMP$(Y1),1,16)=A$+STRING$(16," "):F=1:RETURN
  262. 12610   *S_C_収入
  263. 12620    LOCATE 0,20:PRINT C$(Y1)+"  収入:";:LINE INPUT A$:IF A$="" RETURN
  264. 12630    IF VAL(A$)>255 OR VAL(A$)<0 RETURN
  265. 12640    MID$(CAMP$(Y1),20,1)=CHR$(VAL(A$)):F=1:RETURN
  266. 12650   *S_C_MONEY
  267. 12660    LOCATE 0,20:PRINT C$(Y1)+"軍資金:";:LINE INPUT A$:IF A$="" RETURN
  268. 12670    IF VAL(A$)>&H7FFFFFFF OR VAL(A$)<0 RETURN
  269. 12680    A&=VAL(A$)
  270. 12690    A=A&\&H1000000:A&=A&-A*&H1000000
  271. 12700    MID$(CAMP$(Y1),28,1)=CHR$(A)
  272. 12710    A=A&\&H10000  :A&=A&-A*&H10000
  273. 12720    MID$(CAMP$(Y1),27,1)=CHR$(A)
  274. 12730    A=A&\&H100    :A&=A&-A*&H100
  275. 12740    MID$(CAMP$(Y1),26,1)=CHR$(A)
  276. 12750    A=A&\&H1      :A&=A&-A*&H1
  277. 12760    MID$(CAMP$(Y1),25,1)=CHR$(A)
  278. 12770    F=1:RETURN
  279. 12780 *CHANGE_MODE '------------------------------------------- CHANGE_MODE
  280. 12790  SYMBOL(0,464),"MODE",1,1,%1
  281. 12800  WHILE MOUSE(2,0):WEND
  282. 12810  EDIT_MODE=(EDIT_MODE+1) AND 1
  283. 12820  GOSUB *PRINT_SELECTION
  284. 12830  SYMBOL(0,464),"MODE",1,1,%10
  285. 12840  GOTO *MAIN
  286. 12850 *UNIT_MODE '----------------------------------------------- UNIT_MODE
  287. 12860  WHILE MOUSE(2,0)=0 AND MOUSE(2,1)=0:WEND
  288. 12870  MX=MOUSE(0):MY=MOUSE(1):MB=MOUSE(2,1)
  289. 12880  NX=HEX_X+X:NY=HEX_Y+Y
  290. 12890  Y=(MY-HEX_SY/2-HEX_SY/8)/HEX_SY:X=(MX-HEX_SX/2+HEX_SX*(Y MOD 2=1)/2)/HEX_SX
  291. 12900  IF X<0 THEN X=0 ELSE IF X>HEX_MX LINE(543,422)-(630,438),PSET,%0,BF:GOTO 12950
  292. 12910  IF Y<0 THEN Y=0 ELSE IF Y>HEX_MY LINE(543,422)-(630,438),PSET,%0,BF:GOTO 12950
  293. 12920  IF NX<>HEX_X+X OR NY<>HEX_Y+Y LINE(543,422)-(630,438),PSET,%0,BF:SYMBOL(543,422),"X="+STR$(HEX_X+X)+" Y="+STR$(HEX_Y+Y),1,1,%10
  294. 12930  IF X<=HEX_MX AND Y<=HEX_MY AND MB         GOTO *SELECT_HEX_U_2
  295. 12940  IF X<=HEX_MX AND Y<=HEX_MY AND MB=0       GOTO *SELECT_HEX_U
  296. 12950  IF MY>462 AND MB=0                        GOTO *SELECT_COMMAND_U
  297. 12960  IF MX>574 AND MX<639 AND MY<65  AND MY>0 AND MB=0 GOSUB *SELECT_HEX_ALL:GOTO 12860
  298. 12970  IF MX>527 AND MX<639 AND MY<406 AND MY>69 AND MB=0 GOTO *SELECT_SELECTION_U
  299. 12980  GOTO 12860
  300. 12990 *SELECT_COMMAND_U '--------------------------------- SELECT_COMMAND_U
  301. 13000  X=MX/8
  302. 13010  IF X<5 GOSUB *CHANGE_MODE:GOTO 12860 '
  303. 13020  IF X>5 AND X<13 GOSUB *CHANGE_HEX_SIZE:GOTO 12860 '
  304. 13030  IF X>13 AND X<18 GOSUB *SAVE:GOTO 12860
  305. 13040  IF X>18 AND X<23 GOSUB *LOAD:GOTO 12860
  306. 13050  IF X>23 AND X<33 GOSUB *SITUATION:GOTO 12860 '
  307. 13060  IF X>33 AND X<42 GOSUB *MAPCHECK:GOTO 12860 '
  308. 13070  IF X>42 AND X<48 GOSUB *CLEAR_U:GOTO 12860
  309. 13080  GOTO 12860
  310. 13090 *SELECT_SELECTION_U '----------------------------- SELECT_SELECTION_U
  311. 13100  F=0:B=CAMP
  312. 13110  IF MX>558 AND MX<575 AND MY>84 AND MY<101  UNIT_S=UNIT_S-32:F=1
  313. 13120  IF MX>558 AND MX<575 AND MY>356 AND MY<373 UNIT_S=UNIT_S+32:F=1
  314. 13130  IF MX>527 AND MX<600 AND MY>100 AND MY<357 A=UNIT_NO:UNIT_NO=UNIT_S+(MY-105)/8:F=2
  315. 13140  IF MX>527 AND MX<600 AND MY>390 AND MY<406 CAMP=(CAMP AND 3)+1:F=2
  316. 13150  IF UNIT_S>96 UNIT_S=96:GOTO 12860 ELSE IF UNIT_S<0 UNIT_S=0:GOTO 12860
  317. 13160  IF F=1 F=0:GOSUB *PRINT_SELECTION:GOTO 12860
  318. 13170  IF F<>2 F=0:GOTO 12860
  319. 13180  IF UNIT_NO>125 UNIT_NO=A
  320. 13190  IF A=UNIT_NO AND B=CAMP THEN 12860
  321. 13200  LINE(527,389)-(639,406),PSET,%0,BF
  322. 13210 COLOR,%14:SYMBOL(528,390),UNITNAME$(UNIT_NO),.5!,1,%CAMP,,,8:COLOR,%0
  323. 13220  GOTO 12860
  324. 13230 *SELECT_HEX_U '----------------------------------------- SELECT_HEX_U
  325. 13240  X1=X+HEX_X:Y1=Y+HEX_Y
  326. 13250  IF FNUNIT_TMP(X1,Y1)=255 GOTO *PUT_UNIT
  327. 13260  *SET_DATA
  328. 13270   NO=FNUNIT_TMP(X1,Y1):NO1=FNUNIT(X1,Y1):NO2=FNUNIT_NO1(NO1)
  329. 13280   CAMP1=NO\64
  330. 13290   GET@A(528,70)-(639,405),MAP1&
  331. 13300   LINE(528,70)-(639,405),PSET,0,BF
  332. 13310   SYMBOL(528,70),"No."+RIGHT$(STR$(NO MOD 64),3),.5!,1
  333. 13320   SYMBOL(560,70),UNITNAME$(NO2),.5!,1,%CAMP1+1
  334. 13330   SYMBOL(528,86),"Move"+STR$(ASC(MID$(CAMP_UNIT$(NO1),10,1)))+"/"+STR$(UNITDATA(NO2,1)),1,1
  335. 13340   SYMBOL(528,102),"Left"+STR$(ASC(MID$(CAMP_UNIT$(NO1),4,1))),1,1
  336. 13350   SYMBOL(528,118),"Fuel"+STR$(ASC(MID$(CAMP_UNIT$(NO1),5,1)))+"/"+STR$(UNITDATA(NO2,0)),1,1
  337. 13360   FOR I=0 TO 2
  338. 13370    SYMBOL(528,134+I*32),ARM_NAME$(UNITDATA(NO2,2+I)),1,1
  339. 13380    SYMBOL(584,150+I*32),RIGHT$("  "+STR$(ASC(MID$(CAMP_UNIT$(NO1),12+I,1))),3)+"/"+RIGHT$("  "+STR$(UNITDATA(NO2,8+I)),3),1,1
  340. 13390   NEXT
  341. 13400   SYMBOL(528,300),"DATA RESET",1,1
  342. 13410   WHILE MOUSE(2,0)=0 AND MOUSE(2,1)=0:WEND
  343. 13420   MX=MOUSE(0):MY=MOUSE(1):F=0
  344. 13430   IF MOUSE(2,1) WHILE MOUSE(2,1):WEND:PUT@A(528,70)-(639,405),MAP1&:GOTO 12860
  345. 13440   IF MX>528 AND MY>85 AND MY<101 GOSUB *C_UNITDATA_MOVE
  346. 13450   IF MX>528 AND MY>101 AND MY<118 GOSUB *C_UNITDATA_LEFT
  347. 13460   IF MX>528 AND MY>117 AND MY<134 GOSUB *C_UNITDATA_FUEL
  348. 13470   IF MX>528 AND MY>299 AND MY<316 GOSUB *C_UNITDATA_RESET
  349. 13480   IF MX>528 AND MY>149 AND MY<166 Y=1:GOSUB *C_UNITDATA_WEAPON
  350. 13490   IF MX>528 AND MY>181 AND MY<198 Y=2:GOSUB *C_UNITDATA_WEAPON
  351. 13500   IF MX>528 AND MY>213 AND MY<230 Y=3:GOSUB *C_UNITDATA_WEAPON
  352. 13510   CLS 4:IF F=1 F=0:GOTO 13300
  353. 13520   GOTO 13410
  354. 13530   *C_UNITDATA_MOVE
  355. 13540    LOCATE 66,20:LINE INPUT "Move:";A$:IF A$="" RETURN
  356. 13550    IF VAL(A$)<0 OR VAL(A$)>255 RETURN
  357. 13560    MID$(CAMP_UNIT$(NO1),10,1)=CHR$(VAL(A$)):F=1
  358. 13570    RETURN
  359. 13580   *C_UNITDATA_LEFT
  360. 13590    LOCATE 66,20:LINE INPUT "Left:";A$:IF A$="" RETURN
  361. 13600    IF VAL(A$)<0 OR VAL(A$)>255 RETURN
  362. 13610    MID$(CAMP_UNIT$(NO1),4,1)=CHR$(VAL(A$)):F=1
  363. 13620    RETURN
  364. 13630   *C_UNITDATA_FUEL
  365. 13640    LOCATE 66,20:LINE INPUT "Fuel:";A$:IF A$="" RETURN
  366. 13650    IF VAL(A$)<0 OR VAL(A$)>255 RETURN
  367. 13660    MID$(CAMP_UNIT$(NO1),5,1)=CHR$(VAL(A$)):F=1
  368. 13670    RETURN
  369. 13680   *C_UNITDATA_WEAPON
  370. 13690    LOCATE 66,20:LINE INPUT "Weapon Left:";A$:IF A$="" RETURN
  371. 13700    IF VAL(A$)<0 OR VAL(A$)>255 RETURN
  372. 13710    MID$(CAMP_UNIT$(NO1),11+Y,1)=CHR$(VAL(A$)):F=1
  373. 13720    RETURN
  374. 13730   *C_UNITDATA_RESET
  375. 13740    CAMP_UNIT$(NO1)=FNUNIT_DATA$(NO1,1,3)+CHR$(10,UNITDATA(NO2,0))+FNUNIT_DATA$(NO1,6,4)+CHR$(UNITDATA(NO2,1))+FNUNIT_DATA$(NO1,11,1)+FNUNIT_DATA$(NO1,12,4)+FNUNIT_DATA$(NO1,16,17):F=1
  376. 13750    RETURN
  377. 13760 *PUT_UNIT '------------------------------------------------- PUT_UNIT
  378. 13770  NO1=(CAMP-1)*48
  379. 13780  IF FNUNIT_NO1(NO1)=254 GOTO *PUT_UNIT1 ELSE NO1=NO1+1:IF NO1=CAMP*48 ELSE 13780
  380. 13790  SYMBOL(16,448),"ユニットが既に48在ります",1,1
  381. 13800  WHILE MOUSE(2,0):WEND
  382. 13810  LINE(16,448)-(300,463),PSET,0,BF
  383. 13820  GOTO 12860
  384. 13830  *PUT_UNIT1
  385. 13840    X1=HEX_X+X:Y1=HEX_Y+Y
  386. 13850    CAMP_UNIT$(NO1)=FNUNIT_DATA$(NO1,1,2)+CHR$(UNIT_NO+1,10,UNITDATA(NO2,0))+FNUNIT_DATA$(NO1,6,4)+CHR$(UNITDATA(NO2,1))+FNUNIT_DATA$(NO1,11,1)+FNUNIT_DATA$(NO1,12,4)+FNUNIT_DATA$(NO1,16,17)
  387. 13860    MID$(MAP_DATA$(Y1),X1*2+2,1)=CHR$(NO1+(CAMP-1)*16)
  388. 13870    ON HEX_MODE+1 GOTO *P_U_0,*P_U_1,*P_U_2
  389. 13880    *P_U_0
  390. 13890     SX=X*32+(Y MOD 2)*16:SY=Y*24
  391. 13900     A$=UNITNAME$(FNUNIT_NO(X1,Y1)):I=INSTR(A$," ")
  392. 13910     COLOR ,%10:SYMBOL(SX,SY+16),A$,1/(-3*(I=0)-2*(I>9)-(I>5)+1),.5!,%(FNUNIT_TMP(X1,Y1)\64)+1,,,8:COLOR ,%0
  393. 13920     SYMBOL(SX+8,SY+8),STR$(FNUNIT_LEFT(X1,Y1)),1,.5!,%10,,,8
  394. 13930     GOTO *P_U_NEXT
  395. 13940    *P_U_1
  396. 13950     SX=X*16+(Y MOD 2)*8:SY=Y*12
  397. 13960     SYMBOL(SX,SY+8),STR$(FNUNIT_LEFT(X1,Y1)),.5!,.5!,%(FNUNIT_TMP(X1,Y1)\64)+1,,,8
  398. 13970     GOTO *P_U_NEXT
  399. 13980    *P_U_2
  400. 13990     SX=X*8+(Y MOD 2)*4:SY=Y*6
  401. 14000     I=25+CAMP:PUT@A(SX,SY)-(SX+7,SY+5),HQ&,MATTE,,,0,6*I
  402. 14010    *P_U_NEXT
  403. 14020    GOTO 12860
  404. 14030 *SELECT_HEX_U_2 '------------------------------------- SELECT_HEX_U_2
  405. 14040  X1=HEX_X+X:Y1=HEX_Y+Y
  406. 14050  IF FNUNIT_TMP(X1,Y1)=254 GOTO 12860
  407. 14060    CAMP_UNIT$(NO1)=CHR$(0,0,&HFF,0,0,0,0,0,0,0,0,0,0,0,&HFF)+STRING$(17,CHR$(0))
  408. 14070    MID$(MAP_DATA$(Y1),X1*2+2,1)=CHR$(&HFF)
  409. 14080    ON HEX_MODE+1 GOTO *S_H_0,*S_H_1,*S_H_2
  410. 14090    *S_H_0
  411. 14100     SX=X*32+(Y MOD 2)*16:SY=Y*24
  412. 14110     PUT@A(SX,SY)-(SX+31,SY+31),LAND&,MATTE,,,0,128*FNMAP(X1,Y1)
  413. 14120     GOTO *S_H_NEXT
  414. 14130    *S_H_1
  415. 14140     SX=X*16+(Y MOD 2)*8:SY=Y*12
  416. 14150     PUT@A(SX,SY)-(SX+31,SY+31),LAND&,MATTE,.5!,.5!,0,128*FNMAP(X1,Y1)
  417. 14160     GOTO *S_H_NEXT
  418. 14170    *S_H_2
  419. 14180     SX=X*8+(Y MOD 2)*4:SY=Y*6
  420. 14190     I=FNMAP(X,Y):PUT@A(SX,SY)-(SX+7,SY+5),HQ&,MATTE,,,0,6*I
  421. 14200    *S_H_NEXT
  422. 14210    GOTO 12860
  423. 14220 *CLEAR_U '--------------------------------------------------- CLEAR_U
  424. 14230  SYMBOL(42*8,464),"CLEAR",1,1,%1
  425. 14240  FOR Y=0 TO 63
  426. 14250   FOR X=0 TO 63
  427. 14260    MID$(MAP_DATA$(Y),X*2+2,1)=CHR$(&HFF)
  428. 14270   NEXT
  429. 14280  NEXT
  430. 14290  FOR I=0 TO 48*4-1
  431. 14300    CAMP_UNIT$(I)=CHR$(0,0,&HFF,0,0,0,0,0,0,0,0,0,0,0,&HFF)+STRING$(17,CHR$(0))
  432. 14310  NEXT
  433. 14320  GOSUB *PRINT_HEX
  434. 14330  SYMBOL(42*8,464),"CLEAR",1,1,%10
  435. 14340  GOTO 12860
  436. 14350 *PRINT_HEX '----------------------------------------------- PRINT_HEX
  437. 14360 ON HEX_MODE+1 GOTO *HEX_MODE_0,*HEX_MODE_1,*HEX_MODE_2
  438. 14370 *HEX_MODE_0:HEX_SX=32:HEX_SY=24:HEX_MX=15:HEX_MY=17
  439. 14380  FOR Y=0 TO 17
  440. 14390   SY=Y*24:Y1=HEX_Y+Y
  441. 14400   FOR X=0 TO 15
  442. 14410    SX=X*32+(Y MOD 2)*16:X1=HEX_X+X
  443. 14420    PUT@A(SX,SY)-(SX+31,SY+31),LAND&,MATTE,,,0,128*FNMAP(X1,Y1)
  444. 14430    IF FNUNIT_TMP(X1,Y1)<>255 A$=UNITNAME$(FNUNIT_NO(X1,Y1)):I=INSTR(A$," "):COLOR ,%10:SYMBOL(SX,SY+16),A$,1/(-3*(I=0)-2*(I>9)-(I>5)+1),.5!,%(FNUNIT_TMP(X1,Y1)\64)+1,,,8:COLOR ,%0:SYMBOL(SX+8,SY+8),STR$(FNUNIT_LEFT(X1,Y1)),1,.5!,%10,,,8
  445. 14440   NEXT
  446. 14450  NEXT
  447. 14460  LINE(574+HEX_X,HEX_Y)-STEP(18,20),XOR,%10,B
  448. 14470  RETURN
  449. 14480 *HEX_MODE_1:HEX_SX=16:HEX_SY=12:HEX_MX=31:HEX_MY=35
  450. 14490  FOR Y=0 TO 35
  451. 14500   SY=Y*12:Y1=HEX_Y+Y
  452. 14510   FOR X=0 TO 31
  453. 14520    SX=X*16+(Y MOD 2)*8
  454. 14530    PUT@A(SX,SY)-(SX+31,SY+31),LAND&,MATTE,.5!,.5!,0,128*FNMAP(HEX_X+X,Y1)
  455. 14540    IF FNUNIT_TMP(HEX_X+X,Y1)<>255 SYMBOL(SX,SY+8),STR$(FNUNIT_LEFT(HEX_X+X,Y1)),.5!,.5!,%(FNUNIT_TMP(HEX_X+X,Y1)\64)+1,,,8
  456. 14550   NEXT
  457. 14560  NEXT
  458. 14570  LINE(574+HEX_X,HEX_Y)-STEP(34,38),XOR,%10,B
  459. 14580  RETURN
  460. 14590 *HEX_MODE_2:HEX_SX=8:HEX_SY=6:HEX_MX=63:HEX_MY=63:HEX_X=0:HEX_Y=0
  461. 14600  FOR Y=0 TO 63
  462. 14610   SY=Y*6
  463. 14620   FOR X=0 TO 63
  464. 14630    SX=X*8+(Y MOD 2)*4
  465. 14640    IF FNUNIT_TMP(X,Y)=255 I=FNMAP(X,Y) ELSE I=25+(FNUNIT_TMP(X,Y)\64)
  466. 14650    PUT@A(SX,SY)-(SX+7,SY+5),HQ&,MATTE,,,0,6*I
  467. 14660   NEXT
  468. 14670  NEXT
  469. 14680  RETURN
  470. 14690 *PRINT_HEX_ALL
  471. 14700 FOR Y=0 TO 63
  472. 14710  FOR X=0 TO 63
  473. 14720   PSET(575+X,1+Y),%MAP_COLOR(FNMAP(X,Y))
  474. 14730  NEXT
  475. 14740 NEXT
  476. 14750 LINE(574,0)-(639,65),PSET,%10,B
  477. 14760 RETURN
  478. 14770 *PRINT_SELECTION '----------------------------------- PRINT_SELECTION
  479. 14780 IF EDIT_MODE=1 THEN *UNIT_
  480. 14790 *HEX_
  481. 14800  LINE(528,70)-(639,405),PSET,%0,BF
  482. 14810  FOR Y=0 TO 8
  483. 14820   FOR X=0 TO 2
  484. 14830    SX=543+X*32:SY=70+Y*32
  485. 14840    IF X+Y*3<26 PUT@A(SX,SY)-(SX+31,SY+31),LAND&,,,,,128*(X+Y*3)
  486. 14850   NEXT
  487. 14860  NEXT
  488. 14870  SYMBOL(543,358),"Hex",1,1,%10
  489. 14880  PUT@A(543,374)-(574,405),LAND&,,,,,128*HEX_NO
  490. 14890  RETURN
  491. 14900 *UNIT_
  492. 14910  LINE(528,70)-(639,405),PSET,%0,BF
  493. 14920  SYMBOL(559,85),"△",1,1,%10:SYMBOL(559,357),"▽",1,1,%10
  494. 14930  FOR I=0 TO 31
  495. 14940   IF UNIT_S+I>125 THEN 14960
  496. 14950   SYMBOL(528,101+I*8),UNITNAME$(UNIT_S+I),.5!,.5!,%10
  497. 14960  NEXT
  498. 14970  SYMBOL(528,374),"Unit",1,1,%10
  499. 14980 COLOR,%14:SYMBOL(528,390),UNITNAME$(UNIT_NO),.5!,1,%CAMP,,,8:COLOR,%0
  500. 14990  RETURN
  501. 15000 *PALETTE '--------------------------------------------------- PALETTE
  502. 15010 PALETTE  0,[  0,  0,  0]:PALETTE  1,[  0,  0,192]
  503. 15020 PALETTE  2,[  0,192,  0]:PALETTE  3,[192,  0,  0]
  504. 15030 PALETTE  4,[192,192,  0]:PALETTE  5,[  0,128,  0]
  505. 15040 PALETTE  6,[128,192,  0]:PALETTE  7,[255,  0,  0]
  506. 15050 PALETTE  8,[255,255,  0]:PALETTE  9,[255,  0,255]
  507. 15060 PALETTE 10,[255,255,255]:PALETTE 11,[  0,  0,  0]
  508. 15070 PALETTE 12,[  0,128,192]:PALETTE 13,[ 64, 64, 64]
  509. 15080 PALETTE 14,[128,128,128]:PALETTE 15,[128,128,  0]
  510. 15090 MAP_COLOR( 0)= 6:MAP_COLOR( 1)= 7:MAP_COLOR( 2)= 3:MAP_COLOR( 3)= 9
  511. 15100 MAP_COLOR( 4)= 1:MAP_COLOR( 5)= 8:MAP_COLOR( 6)= 4:MAP_COLOR( 7)= 5
  512. 15110 MAP_COLOR( 8)= 6:MAP_COLOR( 9)=12:MAP_COLOR(10)=14:MAP_COLOR(11)=10
  513. 15120 MAP_COLOR(12)=10:MAP_COLOR(13)=10:MAP_COLOR(14)=10:MAP_COLOR(15)=10
  514. 15130 MAP_COLOR(16)=10:MAP_COLOR(17)=10:MAP_COLOR(18)=10:MAP_COLOR(19)=10
  515. 15140 MAP_COLOR(20)=10:MAP_COLOR(21)=10:MAP_COLOR(22)=10:MAP_COLOR(23)=10
  516. 15150 MAP_COLOR(24)=10:MAP_COLOR(25)=10
  517. 15160 RETURN
  518. 15170 *LOAD_DATA '----------------------------------------------- LOAD_DATA
  519. 15180 LOAD@ "A:\LAND.DAT",LAND&
  520. 15190 LOAD@ "A:\HQ.DAT",HQ&
  521. 15200 LOAD@ "A:\MAPUNIT.DAT",MAPUNIT&
  522. 15210 OPEN "A:\PARAM.DAT" FOR INPUT AS #1
  523. 15220 A$=INPUT$(200,1):A$=INPUT$(238,1)
  524. 15230 FOR I=0 TO 15
  525. 15240  ARM_NAME$(I)=INPUT$(14,1):A$=INPUT$(4,1)
  526. 15250 NEXT
  527. 15260 CLOSE
  528. 15270 OPEN "A:\UNITV.DAT" FOR INPUT AS #1
  529. 15280 A$=INPUT$(250,1):A$=INPUT$(250,1):A$=INPUT$(250,1):A$=INPUT$(250,1)
  530. 15290 A$=INPUT$(46,1)
  531. 15300 FOR I=0 TO 125
  532. 15310  UNITNAME$(I)=INPUT$(18,#1):A$=INPUT$(62,#1)
  533. 15320  UNITDATA(I, 0)=ASC(MID$(A$, 2,1)) 'FUEL
  534. 15330  UNITDATA(I, 1)=ASC(MID$(A$, 5,1)) 'MOVE
  535. 15340  UNITDATA(I, 8)=ASC(MID$(A$,17,1)) 'WEAPON LEFT
  536. 15350  UNITDATA(I, 9)=ASC(MID$(A$,18,1)) 'WEAPON LEFT
  537. 15360  UNITDATA(I,10)=ASC(MID$(A$,19,1)) 'WEAPON LEFT
  538. 15370  UNITDATA(I,11)=ASC(MID$(A$,20,1)) 'WEAPON LEFT
  539. 15380  UNITDATA(I,12)=ASC(MID$(A$,21,1)) 'WEAPON LEFT
  540. 15390  UNITDATA(I,13)=ASC(MID$(A$,22,1)) 'WEAPON LEFT
  541. 15400  UNITDATA(I, 2)=ASC(MID$(A$,11,1)) 'WEAPON NO
  542. 15410  UNITDATA(I, 3)=ASC(MID$(A$,12,1)) 'WEAPON NO
  543. 15420  UNITDATA(I, 4)=ASC(MID$(A$,13,1)) 'WEAPON NO
  544. 15430  UNITDATA(I, 5)=ASC(MID$(A$,14,1)) 'WEAPON NO
  545. 15440  UNITDATA(I, 6)=ASC(MID$(A$,15,1)) 'WEAPON NO
  546. 15450  UNITDATA(I, 7)=ASC(MID$(A$,16,1)) 'WEAPON NO
  547. 15460 NEXT:CLOSE
  548. 15470 RETURN
  549. 15480 *LOAD_MAP '------------------------------------------------- LOAD_MAP
  550. 15490 OPEN "A:\"+FILE$ FOR INPUT AS #1
  551. 15500 DUMMY$=INPUT$(6,1)
  552. 15510 FOR I=0 TO 63
  553. 15520  MAP_DATA$(I)=INPUT$(128,1)
  554. 15530 NEXT
  555. 15540 MAP_SITUATION$=INPUT$(128,1)
  556. 15550 FOR I=0 TO 3
  557. 15560  CAMP$(I)=INPUT$(64,1)
  558. 15570 NEXT
  559. 15580 FOR I=0 TO 4*48-1
  560. 15590  CAMP_UNIT$(I)=INPUT$(32,1)
  561. 15600 NEXT
  562. 15610 FOR I=0 TO 3
  563. 15620  PRODUCTION$(I)=INPUT$(52,1)
  564. 15630 NEXT:CLOSE
  565. 15640 RETURN
  566. 15650 *SET_HEX_DATA '----------------------------------------- SET_HEX_DATA
  567. 15660 LINE(0,0)-(31,31),PSET,%0,BF
  568. 15670 FOR Y=0 TO 31
  569. 15680  FOR X=0 TO 31
  570. 15690   IF MASK(X,Y)=0 PSET(X,Y),%1
  571. 15700  NEXT
  572. 15710 NEXT
  573. 15720 GET@A(0,0)-(31,31),MASK&
  574. 15730 FOR I=0 TO 24
  575. 15740  PUT@A(0,0)-(31,31),LAND&,,,,,128*I
  576. 15750  PUT@A(0,0)-(31,31),MASK&,MATTE,,,%1
  577. 15760  GET@A(0,0)-(31,31),LAND&,128*I
  578. 15770 NEXT
  579. 15780 RETURN
  580. 15790 *MASK '--------------------------------------------------------- MASK
  581. 15800 FOR Y=0 TO 31
  582. 15810  READ A$
  583. 15820  FOR X=0 TO 7
  584. 15830  B=VAL("&H"+MID$(A$,X+1,1))
  585. 15840  IF B>7 MASK(X*4  ,Y)=1:B=B-8
  586. 15850  IF B>3 MASK(X*4+1,Y)=1:B=B-4
  587. 15860  IF B>1 MASK(X*4+2,Y)=1:B=B-2
  588. 15870  IF B>0 MASK(X*4+3,Y)=1:B=B-1
  589. 15880  NEXT
  590. 15890 NEXT:RETURN
  591. 15900 DATA FFFE7FFF,FFF81FFF,FFE007FF,FF8001FF,FE00007F,F800001F,E0000007
  592. 15910 DATA 80000001,00000000,00000000,00000000,00000000,00000000,00000000
  593. 15920 DATA 00000000,00000000,00000000,00000000,00000000,00000000,00000000
  594. 15930 DATA 00000000,00000000,00000000,80000001,E0000007,F800001F,FE00007F
  595. 15940 DATA FF8001FF,FFE007FF,FFF81FFF,FFFE7FFF
  596. 15950 *LOAD '--------------------------------------------------------- LOAD
  597. 15960 FOR I=0 TO 15:PALETTE I,[0,0,0]:NEXT
  598. 15970 FILES "A:\*.MAP"
  599. 15975 FILES "A:\*.GDT"
  600. 15980 INPUT "FILE NAME:",FILE$:GOSUB *LOAD_MAP
  601. 15990 RETURN
  602. 16000 *SAVE '--------------------------------------------------------- SAVE
  603. 16010 SYMBOL(13*8,464),"SAVE",1,1,%1
  604. 16020 KILL "A:\"+FILE$
  605. 16030 OPEN "A:\"+FILE$ FOR OUTPUT AS #1
  606. 16040 PRINT #1,DUMMY$;
  607. 16050 FOR I=0 TO 63
  608. 16060  PRINT #1,MAP_DATA$(I);
  609. 16070 NEXT
  610. 16080 PRINT #1,MAP_SITUATION$;
  611. 16090 FOR I=0 TO 3
  612. 16100  PRINT #1,CAMP$(I);
  613. 16110 NEXT
  614. 16120 FOR I=0 TO 4*48-1
  615. 16130  PRINT #1,CAMP_UNIT$(I);
  616. 16140 NEXT
  617. 16150 FOR I=0 TO 3
  618. 16160  PRINT #1,PRODUCTION$(I);
  619. 16170 NEXT:CLOSE
  620. 16180 SYMBOL(13*8,464),"SAVE",1,1,%10
  621. 16190 RETURN
  622. 16200 *ERR
  623. 16210 RESUME NEXT
  624.